using UnityEngine;
using System.Collections.Generic;

public class BackpackSystem : MonoBehaviour
{
    public Player player; // 玩家引用
    public ItemManager itemManager; // 道具管理器引用
    public int maxConsumables = 2; // 最大消耗品数量
    public int maxEquippableItems = 14; // 最大装备道具数量（显示在外面）

    // 存储玩家当前持有的消耗品和装备道具
    private List<ConsumableItem> _consumables = new List<ConsumableItem>();
    private List<Item> _equippedItems = new List<Item>();
    private List<Item> _backpackItems = new List<Item>(); // 额外的道具存储

    // 记录道具使用次数
    private Dictionary<string, int> itemUsageCounts = new Dictionary<string, int>();

    void Start()
    {
        // 确保 itemManager 已初始化
        if (itemManager == null)
        {
            itemManager = FindObjectOfType<ItemManager>();
            if (itemManager == null)
            {
                Debug.LogError("ItemManager 未找到，请确保场景中存在 ItemManager 对象。");
            }
        }
    }

    void Update()
    {
        // 示例：检测按键以使用消耗品
        if (Input.GetKeyDown(KeyCode.U) && _consumables.Count > 0)
        {
            UseConsumable(_consumables[0]); // 使用第一个消耗品
        }
        if (Input.GetKeyDown(KeyCode.I) && _consumables.Count > 1)
        {
            UseConsumable(_consumables[0]); // 使用第一个消耗品
        }
    }

    // 使用基础道具并记录使用次数
    public void UseItem(Item item)
    {
        if (item is BasicItem basicItem)
        {
            // 应用道具效果到玩家
            basicItem.BasicApply(player);
            
            // 记录使用次数
            if (!itemUsageCounts.ContainsKey(item.itemName))
            {
                itemUsageCounts[item.itemName] = 0;
            }
            itemUsageCounts[item.itemName]++;
            Debug.Log($"使用了基础道具 {item.itemName}，已使用 {itemUsageCounts[item.itemName]} 次。");
        }
        else if (item is PowerUpItem powerUpItem)
        {
            //todo:powerup的效果
            powerUpItem.ApplyEffect(player);
            Debug.Log($"使用了pwoerup道具 {item.itemName}");

        }
        else
        {
            Debug.LogError("使用道具失败");
        }
        
    }

    // 拾取消耗品
    public void PickUpConsumable(ConsumableItem consumable)
    {
        if (_consumables.Count < maxConsumables)
        {
            // 有足够空间，添加消耗品到背包
            _consumables.Add(consumable);
            Debug.Log($"获得了消耗品 {consumable.itemName}，当前数量：{_consumables.Count}/{maxConsumables}。");
        }
        else
        {
            // 没有足够空间，提示玩家进行替换
            Debug.Log("没有足够的消耗品空位，请选择一个消耗品进行替换。");
            // 假设玩家选择了第一个消耗品进行替换（可以实现一个UI供玩家选择）
            ReplaceConsumable(consumable, 0);
        }
    }

    // 替换消耗品
    public void ReplaceConsumable(ConsumableItem newConsumable, int indexToReplace)
    {
        if (indexToReplace >= 0 && indexToReplace < _consumables.Count)
        {
            // 获取被替换的消耗品
            ConsumableItem oldConsumable = _consumables[indexToReplace];

            // 移除旧的消耗品并添加新的消耗品
            _consumables[indexToReplace] = newConsumable;

            // 将旧的消耗品重新放置到地上（假设在玩家位置）
            itemManager.SpawnItemInScene(oldConsumable, player.transform.position);

            Debug.Log($"替换了消耗品 {oldConsumable.itemName}，新的消耗品为 {newConsumable.itemName}。");
        }
    }

    // 使用消耗品
    public void UseConsumable(ConsumableItem consumable)
    {
        // 应用消耗品的效果
        consumable.ApplyConsume(player);

        // 从背包中移除消耗品
        _consumables.Remove(consumable);

        // 输出使用信息
        Debug.Log($"使用了消耗品 {consumable.itemName}，剩余数量：{_consumables.Count}/{maxConsumables}。");
    }

    // 拾取非消耗品道具
    public void PickUpEquippableItem(Item item)
    {
        if (_equippedItems.Count < maxEquippableItems)
        {
            // 有足够空间，添加可装备道具
            _equippedItems.Add(item);
            UseItem(item); // 立即应用道具效果
            Debug.Log($"装备了道具 {item.itemName}，当前装备数量：{_equippedItems.Count}/{maxEquippableItems}。");
        }
        else
        {
            // 没有足够空间，添加到额外背包
            _backpackItems.Add(item);
            Debug.Log($"背包中添加了道具 {item.itemName}，当前背包数量：{_backpackItems.Count}。");
        }
    }
    
        // 获取背包中的所有道具
        public List<Item> GetBackpackItems()
        {
            return _backpackItems;
        }
    
        // 获取已装备的道具
        public List<Item> GetEquippedItems()
        {
            return _equippedItems;
        }
    
        // 获取消耗品
        public List<ConsumableItem> GetConsumables()
        {
            return _consumables;
        }

}
